使用xcode7创建静态库和动态库的完整过程

1、创建项目
首先先创建一个简单的iOS项目用来测试SDK,创建完成项目结构如下:

Snip20160830_2.png

点击项目名称,在右侧Target选项中点击加号,在选择面板中选择cocoa touch framework,然后点击next.然后填写SDK的名字,然后点击finish.最后targets选项的项目如下图所示:其中最下面的SDK就是我创建的库。 

Snip20160830_6.png

2、编写framework的代码

在你的framework文件夹下面右键add file,然后开始编码,这里就不细说了,和平时写的类一样,只是一定要保证你的文件是在你创建的framework里面.然后在.h头文件中提供给外界使用的方法属性等。 

3、配置项目
上面我们已经创建好了项目并且逻辑代码都写好了,接下来 需要对项目做一些配置,Let’s do it.
首先对framework进行一些基本的设置,根据自身需要来设置,还是在targets选选中你的framework的名字,然后在buildsetting那里找到architectures设置支持的指令集,默认是没有支持armv7s的,所以我们要手动添加,点击右边的选项,然后选择other,然后在弹出框中点击下面的加号,然后添加 armv7s 。
最后添加完成如下图所示:

Snip20160830_12.png

设置iOS deployment target ,表示最低支持iOS的系统版本,根据个人情况来选择,一般如果是动态库,那么是8.0,如果是静态库是7.0。

Snip20160830_14.png

 3.3设置静态库支持bitcode
如下图所示:设置other c flag ,在release那里添加 -fembed-bitcode 。

Snip20160830_15.png

如果要忽略一些警告,还可以在other warning flag那里输入一些值,具体可以[看这里](http://www.cocoachina.com/ios/20141218/10678.html)。

因为你正在创建framework供他人使用,最好禁掉这些功能(无效代码和debug用符号),让用户自己选择对自己的项目有利的部分使用。和之前一样,使用搜索框,改变下述设置:

Dead Code Stripping设置为NO
Strip Debug Symbol During Copy 全部设置为NO
Strip Style设置为Non-Global Symbols
如果使用了category ,则使用该FMWK的程序运行时会crash,此时需要在该工程中 other linker flags 添加两个参数 -ObjC -all_load
编译出Framework是,需要把 GenerateDebugSymbols =NO,否则会出现很多 warning:例如 .pcm not such file or directory

设置framework为动态库或者静态库。Dynamic library为动态库,Static library为静态库。

Snip20160830_17.png

然后切换到Build Phases选项卡中,打开headers,将你要提供给外界使用的头文件暴露出来,默认该文件都是在Project里面的

Snip20160830_20.png

然后将要供外界使用的头文件拖拽到public下面。

Snip20160830_21.png

到这里framework的的设置就完成了,接下来可以设置项目来使用framework。

4、项目引用framework
在左上角的导航栏那里选择刚开始创建的测试项目,然后选择edit scheme

Snip20160830_23.png

在Run选项那里,点击右侧下面的加号,然后在弹出面板选择我们创建的framework,点击
close。
然后就可以在项目中引入头文件使用里面的类。

5.关于framework打包
在左上角的导航栏那里选择创建的framework,然后点击edit scheme

Snip20160830_26.png

然后在Run选项中,将build configuration 设置为release

Snip20160830_28.png

如果build的时候选择的是模拟器,那么编译出来的framework就是可以在模拟器上运行的,但是真机不行,如果想在真机使用,build的时候必须选择真机。

可以使用 lipo -info 来查看framework支持的cpu
可以使用lipo -create 来合并两个framework

需要注意的是,如果是使用了合并模拟器和真机结构的静态库,上传到app么没有问题,如果是使用了合并模拟器和真机结构的冬天库,archive的时候会报错,错误信息大致是不能包含用i386或者x86-64架构的framework,所以发布的时候记得使用真机版本的framework.

以上只是个人对于framework的一些探究,如果有什么纰漏或者错误的地方,欢迎指正。

-------评论系统采用disqus,如果看不到需要翻墙-------------